#include "JsonSetting.h"

#include <codecvt>

JsonSetting::JsonSetting(std::string JsonPath)
{
    if(!JsonPath.empty())
    {
        std::ifstream file(JsonPath);
        if (!JsonReader.parse(file, JsonValue))
        {
            std::cerr << "Failed to parse JSON file." << std::endl;
        }

        WriteFileName = GetJsonString(&JsonValue, "final_film");
        TimeLineJsonData = JsonValue["timeline"];
        if(TimeLineJsonData.isArray())
        {
            for(const Json::Value Item : TimeLineJsonData)
            {
                VideosJsonData = Item["videos"];
                AudiosJsonData = Item["audios"];
                VideoEffectJsonData = Item["video_effect"];
                EffectJsonData = Item["effect"];
                CaptionJsonData = Item["caption"];
            }
        }   
    }
}

JsonSetting::~JsonSetting()
{
}

std::string JsonSetting::GetJsonString(const Json::Value* const& JsonData, std::string Key)
{
    return (*JsonData)[Key].asString();
}

int JsonSetting::GetJsonInt(const Json::Value* const& JsonData, std::string Key)
{
    return (*JsonData)[Key].asInt();
}

float JsonSetting::GetJsonFloat(const Json::Value* const& JsonData, std::string Key)
{
    return (*JsonData)[Key].asFloat();
}

bool JsonSetting::GetJsonBool(const Json::Value* const& JsonData, std::string Key)
{
    return (*JsonData)[Key].asBool();
}

std::string JsonSetting::GetJsonObjectString(const Json::Value* const& JsonData, std::string Object, std::string Key)
{
    return (*JsonData)[Object][Key].asString();
}

int JsonSetting::GetJsonObjectInt(const Json::Value* const& JsonData, std::string Object, std::string Key)
{
    return (*JsonData)[Object][Key].asInt();
}

float JsonSetting::GetJsonObjectFloat(const Json::Value* const& JsonData, std::string Object, std::string Key)
{
    return (*JsonData)[Object][Key].asFloat();
}

bool JsonSetting::GetJsonObjectBool(const Json::Value* const& JsonData, std::string Object, std::string Key)
{
    return (*JsonData)[Object][Key].asBool();
}
